import axios from 'axios';
import { ElMessage } from 'element-plus'
import { useTokenStore } from '@/stores/token.js'
// 由于模块加载顺序的问题, 在request.js中直接引用router/index.js中导出的路由实例即可
import router from '@/router'
// 定义一个变量baseURL记录公共前缀
const baseURL = 'http://127.0.0.1:64500/';
const service = axios.create({baseURL});

// 添加请求拦截器
service.interceptors.request.use(
  (config) => {
    // 添加token
    const tokenStore = useTokenStore();
    if(tokenStore.token){
        config.headers.Authorization = tokenStore.token;
    }
    return config;
  },
  (error) => {
    ElMessage.error('服务异常');
    Promise.reject(error);
  }
)

// 添加响应拦截器
service.interceptors.response.use(
  (result) => {
    // 判断业务状态码
    if(result.data.code === 0) {
      return result.data;
    }
    ElMessage.error(result.data.message ? result.data.message : '服务异常');
    return Promise.reject(result.data); // 转化异步状态为失败状态
  },
  (error) => {
    // 判断响应状态码, 如果为401, 则证明未登录
    if (error.response.status === 401) {
      ElMessage.error('请先登录');
      router.push('/');
    } else {
      ElMessage.error('服务异常');
    }
    return Promise.reject(error); // 转化异步状态为失败状态
  }
)

export default service;